---
title: Bray Curtis Dissimilarity
author: gaoch
date: '2018-10-17'
slug: bray-curtis-dissimilarity
categories:
  - R
tags:
  - statistics
---

<script src="/rmarkdown-libs/header-attrs/header-attrs.js"></script>


<p>本文介绍 Bray Curtis Dissimilarity 的概念和计算方法。</p>
<p>Bray Curtis Dissimilarity（Bray-Curtis 相异度）是生态学中用来衡量不同样地<strong>物种组成差异</strong>的参数。</p>
<p>其定义和计算公式为：</p>
<p><span class="math display">\[BC_{ij}=1-2C_{ij}/(S_{i}+S_{j})\]</span></p>
<p>其中：</p>
<ul>
<li><span class="math inline">\(i\)</span> 和 <span class="math inline">\(j\)</span> 是两个样地；</li>
<li><span class="math inline">\(S_i\)</span> 是样地 <span class="math inline">\(i\)</span> 中物种的总数；</li>
<li><span class="math inline">\(S_j\)</span> 是样地 <span class="math inline">\(j\)</span> 中物种的总数；</li>
<li><span class="math inline">\(C_{ij}\)</span> 在两块样地中每个物种的较少计数的总和。</li>
</ul>
<div id="简单的例子" class="section level2">
<h2>简单的例子</h2>
<p>有两个水族箱：</p>
<ul>
<li>一号：6条金鱼，7条孔雀鱼和4只螃蟹；</li>
<li>二号：10条金鱼和6只螃蟹。</li>
</ul>
<p>为了计算 Bray-Curtis，首先计算<span class="math inline">\(C_{ij}\)</span>。金鱼两个地方都有，较少的是6；孔雀鱼只在一号中有，所以不能添加；螃蟹两个地方都有，较少的是4。因此，<span class="math inline">\(C_{ij}=6+4=10\)</span>。</p>
<p><span class="math inline">\(S_i=6+7+4=17\)</span>，而<span class="math inline">\(S_j=10+6=16\)</span>。</p>
<p>因此,</p>
<p><span class="math display">\[BC_{ij}=1-(2*10)/(17+16)=0.39\]</span></p>
</div>
<div id="bray-curtis-dissimilarity-的性质" class="section level2">
<h2>Bray-Curtis Dissimilarity 的性质</h2>
<p>其取值介于0-1之间。如果是0，则两个样地共享所有相同的物种；如果是1，则它们不共享任何物种。</p>
<p>还有另外一个 Bray-Curtis index，其取值是 1 - Bray-Curtis dissimilarity。表示两个样地之间的相似程度。</p>
</div>
<div id="适用情况" class="section level2">
<h2>适用情况</h2>
<p>要计算 Bray-Curtis Dissimilarity，必须假设两个样地的面积或体积大小相同（与物种计数相关），否则需要在计算前调整计数。</p>
</div>
<div id="r语言实现" class="section level2">
<h2>R语言实现</h2>
<p><code>vegan</code>提供了<code>vegdist</code>来计算这个数值。</p>
<pre class="r"><code>## 用 vegdist 重复上面的例子
df &lt;- data.frame(goldfish=c(6,10),guppies=c(7,0),crab=c(4,6))
require(&quot;vegan&quot;)</code></pre>
<pre><code>## 载入需要的程辑包：vegan</code></pre>
<pre><code>## 载入需要的程辑包：permute</code></pre>
<pre><code>## 载入需要的程辑包：lattice</code></pre>
<pre><code>## This is vegan 2.5-6</code></pre>
<pre class="r"><code>vegdist(df,method = &quot;bray&quot;) # 这个值跟前面人脑计算的一致</code></pre>
<pre><code>##           1
## 2 0.3939394</code></pre>
<pre class="r"><code>## 计算群落数据
data(&quot;varespec&quot;)
## 计算不同样地两两之间的差异度
bc &lt;- vegdist(varespec)

## 使用pheatmap做一个热图
pheatmap::pheatmap(bc,breaks = seq(0,1,0.01))</code></pre>
<p><img src="/post/2018-10-17-bray-curtis-dissimilarity_files/figure-html/vegdist-1.png" width="576" /></p>
</div>
<div id="延伸阅读" class="section level2">
<h2>延伸阅读</h2>
<p><code>vegdist</code>的可用的方法（<code>method = "bray"</code>）还包括 “manhattan”, “euclidean”, “canberra”, “clark”, “bray”, “kulczynski”, “jaccard”, “gower”, “altGower”, “morisita”, “horn”, “mountford”, “raup”, “binomial”, “chao”, “cao” or “mahalanobis”。</p>
<p><code>designdist</code>可用来设计自己的差异度算法。</p>
</div>
<div id="参考资料" class="section level2">
<h2>参考资料</h2>
<ol style="list-style-type: decimal">
<li><a href="https://www.statisticshowto.datasciencecentral.com/bray-curtis-dissimilarity/" class="uri">https://www.statisticshowto.datasciencecentral.com/bray-curtis-dissimilarity/</a></li>
<li><code>?vegdist</code></li>
</ol>
</div>
